#include <stdio.h>
#include <stdlib.h>
#include "shmem.h"

// 设备类型定义
#define DEV_TYPE_MODBUS 1
#define DEV_TYPE_STM32  0

// 数据类型定义
#define DATA_TYPE_BOOL  0
#define DATA_TYPE_INT   1
#define DATA_TYPE_FLOAT 2

// 值类型联合体
typedef union val_t {
    int b_val;     // bool类型
    int i_val;     // 整型值
    float f_val;   // 浮点值
} val_t;

// 标准设备节点
typedef struct std_node {
    int key;            // 唯一标识符
    int type;           // 数据类型
    int dev_type;       // 设备类型
    val_t old_val;      // 上一次的值
    val_t new_val;      // 当前值
    int ret;            // 操作结果
} std_node_t;

int main() {
    printf("=== 共享内存初始化程序 ===\n");
    
    // 1. 创建共享内存
    struct shm_param para;
    size_t shm_size = 4096;
    
    if (shm_init(&para, "shm", shm_size) < 0) {
        printf("共享内存初始化失败\n");
        return -1;
    }
    
    // 2. 获取共享内存地址
    int *p1 = shm_getaddr(&para);
    if (p1 == NULL) {
        printf("获取共享内存地址失败\n");
        return -1;
    }
    
    // 3. 初始化元数据（设备总数）
    int *meta = p1;
    *meta = 0;  // 初始化为0
    
    // 4. 初始化设备数组
    std_node_t *shm_arr = (std_node_t *)(p1 + 1);
    
    printf("共享内存初始化成功\n");
    printf("地址: %p, 大小: %zu 字节\n", p1, shm_size);
    printf("设备总数初始化为: 0\n");
    
    // 5. 保持共享内存连接
    printf("按Enter键退出...");
    getchar();
    
    // 6. 清理资源
    shm_del(&para);
    
    return 0;
}